
eval_rapide2 := proc(P, a::list, abr)	local P0, P1, L0, L1, n, k, tmp;
		n := nops(a);	if n=0 then 		return eval(P, x=a[1]);	fi;	
	P0 := op(2, [division(P, abr[2][1], x)]);	P1 := op(2, [division(P, abr[3][1], x)]);
		tmp := [seq(a[k], k=1..(n/2))];	L0 := eval_rapide2(P0, tmp, abr[2]):	tmp := [seq(a[k], k=((n/2)+1)..n)];	L1 := eval_rapide2(P1, tmp, abr[3]):
		return L0, L1:end;


eval_rapide := proc(P, a::list, abr)	local P0, P1, L0, L1, n, k, tmp;
		n := nops(a);	if n=1 then 		return eval(P, x=a[1]);	fi;	
  P0 := P mod (mul(x-a[k], k=1..((n/2)-1))));
  P1 := P mod (mul(x-a[k], k=(n/2)..n));
  
	tmp := [seq(a[k], k=1..(n/2))];
	L0 := eval_rapide(P0, tmp, abr[2]):
		tmp := [seq(a[k], k=((n/2)+1)..n)];	L1 := eval_rapide(P1, tmp, abr[3]):
		return L0, L1:
end;